<?php
/**
 * 月表示カレンダーページコントローラ
 */
require_once 'Session.php';
require_once 'Request/DateTime.php';
require_once 'b64.php';
require_once APPLICATION_PATH . '/views/Components/Calendar/WeekList.php';
require_once APPLICATION_PATH . '/views/Components/MonthCalendar/MonthCalendar.php';
require_once APPLICATION_PATH . '/views/Components/Calendar/VerticalCalendarController.php';
require_once APPLICATION_PATH . '/controllers/StaffController.php';
require_once APPLICATION_PATH . '/models/Place/COntroller.php';

/**
 * 月表示カレンダーページコントローラクラス
 * Enter description here ...
 * @author admin
 *
 */
class CalendarController extends Zend_Controller_Action
{
	/** 名称：セッションキー */
	const NAME_SESSION_KEY = 'CALENDAR';
	
	protected $_TEMPLATES_C;

	/**
	 * 初期化
	 * Enter description here ...
	 */
	public function init()
	{
		/* Initialize action controller here */
		$this->_TEMPLATES_C = APPLICATION_PATH . '/views/data/templates_c';
	}

	/**
	 * INDEXアクション
	 * Enter description here ...
	 * Calendar/?ymd=20100730
	 */
	public function indexAction()
	{
		// action body
		$iYearNum = 2012;
		$iMonthNum = 1;
		$iStartYobiNum = 1;

		$objContents
		= new Components_Calendar_Weeklist();
		$sHtml = $objContents->fetch();
		$this->view->htmlCalendar = $sHtml;
	}

	public function i2Action()
	{
		$objContents = new Components_MonthCalendar(
				Components_AgeCheckbox::JUNIOR_SCHOOL, 'jsc');
		$sHtml = $objContents->fetch();
		$this->view->Contents = $sHtml;
	}

	/**
	 * 縦型カレンダー
	 * application/viewhttps://junior-succer-club-manager.googlecode.com/svn/trunk/application/controllers/CalendarController.phps/scripts/calendar/vt.tpl
	 */
	public function vtAction()
	{
		/*** スタブＨＴＴＰリクエスト設定*/
//		$_REQUEST[Lib_Request_DateTime::KEY_YEAR] = 2012;
//		$_REQUEST[Lib_Request_DateTime::KEY_MONTH] = '09';
		
		// リクエストに表示年月が設定されていない場合、セッションからの取得を試みるメソッド
		$this->_loadYearMonthFromSession();
		
		$objRequest = new Lib_Request_DateTime();

		/***
		 * 表示ラベル
		 */
		$Label = array();
		$Label[Lib_Request_DateTime::KEY_YEAR] = $objRequest->getYear();
		$Label[Lib_Request_DateTime::KEY_MONTH] = $objRequest->getMonth();
		$this->view->Label = $Label;
		
		/***
		 * 表示ラベルをセッションに保存する
		 */
		$objSession = new Lib_Session(self::NAME_SESSION_KEY);
		$objSession->setValue(
				Lib_Request_DateTime::KEY_YEAR, $Label[Lib_Request_DateTime::KEY_YEAR]);
		$objSession->setValue(
				Lib_Request_DateTime::KEY_MONTH, $Label[Lib_Request_DateTime::KEY_MONTH]);

		/***
		 * 月遷移ページコントロールアンカー
		 */
		$aryLastNextLink = $this->_createNextMonthQuery();
		$Link[Names::BEFOREMANTHLINK]
		= '/Calendar/vt?'
		. $aryLastNextLink[Names::BEFOREMANTHLINK];
		$Link[Names::NEXTMONTHLINK]
		= '/Calendar/vt?'
		. $aryLastNextLink[Names::NEXTMONTHLINK];
		$this->view->LINK = $Link;

		/***
		 * カレンダー
		 */
		$objVC = new Components_Calendar_VerticalCalendarController();
		$this->view->CONTENTS = $objVC->fetch();
		
		/***
		 * 管理者機能リンク
		 */
		/***会場メニュー並び替え画面遷移ＵＲＬ設置 */
		/*** 会場データ読み込み */
		$objMap = new Models_Place_Xml_Controller();
		if ($objMap->count() > 0) {
			$str = '/Calendar/vt';
			if (isset($_REQUEST['year']) && isset($_REQUEST['month'])) {
				$str .= '?year=' . $_REQUEST['year'] . '&month=' . $_REQUEST['month'];
			}
			$this->view->urlPermute 
			= '/Place/permute'
			. '?' . Names::REFERER
			. '=' . urlencode($str);
		}
	}

	/**
	 * 表示年月をセッションから取得する
	 * HTTPリクエストに設定されている場合は、それを優先する
	 */
	protected function _loadYearMonthFromSession()
	{
		/***
		 * セッション
		*/
		$bSessionDateExists = FALSE;
		$objSession = new Lib_Session(self::NAME_SESSION_KEY);
		$sessionYear
		= $objSession->getValue(Lib_Request_DateTime::KEY_YEAR);
		$sessionMonth
		= $objSession->getValue(Lib_Request_DateTime::KEY_MONTH);
		/*** セッション中年月のいずれかが空の場合、当該処理を中断する */
		if (($sessionYear == '') || ($sessionMonth == '')) {
			return;
		}
		
		$objRequest = new Lib_Request();
		
		$requestYear = $objRequest->get(Lib_Request_DateTime::KEY_YEAR);
		$requestMonth = $objRequest->get(Lib_Request_DateTime::KEY_MONTH);
		/*** リクエスト中、年月のいずれかが設定されている場合は、処理を中断する　*/
		if ($requestYear != '') {
			return;
		}
		if ($requestMonth != '') {
			return;
		}
		
		/***
		 *  session情報の年月をリクエストに設定する
		 */
		$_REQUEST[Lib_Request_DateTime::KEY_YEAR] = $sessionYear;
		$_REQUEST[Lib_Request_DateTime::KEY_MONTH] = $sessionMonth;
	}
	
	/**
	 * HTTPリクエストから自身を呼び出すGETパラメータを返す
	 */
	static public function getSelf($actionName)
	{
		$sResult = '';
		$objRequest = new Lib_Request_DateTime();
		/*** 指定アクション判定 */
		switch ($actionName) {
			case 'vt':
				$sResult = '/Calendar/vt/?';
				$sResult
				.= Lib_Request_DateTime::KEY_YEAR . '='
				.   $objRequest->get(Lib_Request_DateTime::KEY_YEAR)
				. '&' . Lib_Request_DateTime::KEY_MONTH
				. '=' . $objRequest->get(Lib_Request_DateTime::KEY_MONTH);
				break;
		}

		return $sResult;
	}

	/**
	 * 先月翌月のリクエストパラメータを返却する
	 */
	protected function _createNextMonthQuery()
	{
		$objRequest = new Lib_Request_DateTime();
		$YYYYMMDDhhmm
		= $objRequest->getYear()
		. sprintf('%02d', $objRequest->getMonth())
		. '010000';
		$objDateMath = new DateMath($YYYYMMDDhhmm);

		$NextYYYYMM = $objDateMath->getYYYYMM_afterMonth(1);
		$resultNext
		= Lib_Request_DateTime::KEY_YEAR
		. '=' . substr($NextYYYYMM, 0, strlen('YYYY'))
		. '&' . Lib_Request_DateTime::KEY_MONTH
		. '=' . substr($NextYYYYMM, strlen('YYYY'), strlen('MM'));

		$LastYYYYMM = $objDateMath->getYYYYMM_afterMonth(-1);
		$resultLast
		= Lib_Request_DateTime::KEY_YEAR
		. '=' . substr($LastYYYYMM, 0, strlen('YYYY'))
		. '&' . Lib_Request_DateTime::KEY_MONTH
		. '=' . substr($LastYYYYMM, strlen('YYYY'), strlen('MM'));

		$aryResult
		= array(
				Names::BEFOREMANTHLINK => $resultLast,
				Names::NEXTMONTHLINK=> $resultNext
				);
		return $aryResult;
	}
}